#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

//int main()
//{
//	int a = 100;
//	int * pa = &a;//pa是专门用来存放地址（指针）的，这里的pa就被称为指针变量
//	
//	//指针变量在32位平台下是4个字节
//	//指针变量在64位平台下是8个字节
//	
//	//int arr[10];
//	//printf("%p", &a);
//
//	return 0;
//}




//int main()
//{
//	printf("%d\n", sizeof(char*));
//	printf("%d\n", sizeof(short*));
//	printf("%d\n", sizeof(int*));
//	printf("%d\n", sizeof(long*));
//	printf("%d\n", sizeof(float*));
//	printf("%d\n", sizeof(double*));
//
//	return 0;
//}



//指针类型的意义

//int main()
//{
//	int a = 0x11223344;//0x开头的是16进制数字
//	char * pa = &a;
//	*pa = 0;
//
//	return 0;
//}

//指针类型决定了指针解引用操作的权限



//int main()
//{
//	int a = 0x11223344;//0x开头的是16进制数字
//	int * pa = &a;
//	char * pc = &a;
//	printf("%p\n", pa);
//	printf("%p\n", pc);
//
//	printf("%p\n", pa+1);
//	printf("%p\n", pc+1);
//
//	return 0;
//}



//int main()
//{
//	int a = 0x11223344;
//	int* pa = &a;
//	*pa = 0;
//
//	return 0;
//}



//野指针
//int main()
//{
//	int* p;//局部变量不初始化的时候，内容是随机值
//	*p = 20;
//	printf("%d\n", *p);
//
//	return 0;
//}




//int * test()
//{
//	int a = 110;
//	return &a;
//}
//
//int main()
//{
//	int* p = test();
//	printf("%d\n", *p);
//
//	return 0;
//}



//int main()
//{
//	int a = 10;
//	int* p = &a;
//
//	int* ptr = NULL;//ptr是一个空指针，没有指向任何有效的空间，这个指针不能直接使用
//	//int* ptr2;//野指针
//
//	if (ptr != NULL)
//	{
//		//使用
//	}
//
//	return 0;
//}



//int main()
//{
//	int arr[10] = { 0 };
//	//不使用下标访问数组
//	int* p = &arr[0];
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//
//	for (i = 0; i < sz; i++)
//	{
//		*p = i;
//		p++;//p = p + 1
//	}
//
//	p = arr;
//
//	for (i = 0; i < sz; i++)
//	{
//		printf("%d ", *(p + i));//p + i
//	}
//
//	/*for (i = 0; i < sz; i++)
//	{
//		printf("%d ", arr[i]);
//	}*/
//
//	return 0;
//}




//int arr[10]
//int* p = arr;
//*(p+i) == arr[i]
//*(arr+i) == arr[i]

//arr[i] == *(arr+i) == *(i+arr) == i[arr]

//int main()
//{
//	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	int i = 0;
//
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", i[arr]);//[] 操作符
//	}
//
//	//2+3 --> 3+2
//	//arr[i] --> i[arr]
//
//	return 0;
//}



//地址-地址
//指针-指针

//int main()
//{
//	int arr[10] = { 0 };
//	printf("%d\n", &arr[9] - &arr[0]);
//	printf("%d\n", &arr[0] - &arr[9]);
//
//	return 0;
//}

//指针-指针得到的数值的绝对值是指针和指针之间的元素个数


//int main()
//{
//	int arr[10] = { 0 };
//	char ch[5] = { 0 };
//	//指针和指针相减的前提是：两个指针指向了同一块空间
//	printf("%d\n", &ch[4] - &arr[0]);//err
//
//	return 0;
//}





//int my_strlen(char* s)
//{
//	int count = 0;
//
//	while (*s != '\0')
//	{
//		count++;
//		s++;
//	}
//
//	return count;
//}


//int my_strlen(char* s)
//{
//	
//	if ('\0' == *s)
//	{
//		return 0;
//	}
//	else
//	{
//		return 1 + my_strlen(s + 1);
//	}
//
//}


//int my_strlen(char* s)
//{
//	char* start = s;
//
//	while (*s != '\0')
//	{
//		s++;
//	}
//
//	return s - start;
//}


//int my_strlen(char* s)
//{
//	char* start = s;
//
//	while (*s)//a b c d e f \0 -> 0
//	{
//		s++;
//	}
//
//	return s - start;
//}


int my_strlen(char* s)
{
	char* start = s;

	while (*s++)
	{
		;
	}

	return s - start - 1;
}

int main()
{
	char arr[] = "abcdef";
	int len = my_strlen(arr);
	printf("%d\n", len);

	return 0;
}